package com.wande.dataplatform.service;

import com.wande.common.mybatis.core.page.PageQuery;
import com.wande.common.mybatis.core.page.TableDataInfo;
import com.wande.dataplatform.domain.dto.DataAssetDTO;
import com.wande.dataplatform.domain.vo.DataAssetStatisticsVO;

import java.util.List;
import java.util.Map;

/**
 * 数据资产Service接口
 *
 * @author ruoyi
 */
public interface IDataAssetService {

    /**
     * 查询数据资产
     *
     * @param id 数据资产主键
     * @return 数据资产
     */
    DataAssetDTO queryById(Long id);

    /**
     * 查询数据资产列表
     *
     * @param dto 数据资产查询条件
     * @param pageQuery 分页参数
     * @return 数据资产集合
     */
    TableDataInfo<DataAssetDTO> queryPageList(DataAssetDTO dto, PageQuery pageQuery);

    /**
     * 查询数据资产列表
     *
     * @param dto 数据资产查询条件
     * @return 数据资产集合
     */
    List<DataAssetDTO> queryList(DataAssetDTO dto);

    /**
     * 新增数据资产
     *
     * @param dto 数据资产
     * @return 结果
     */
    Long insertDataAsset(DataAssetDTO dto);

    /**
     * 修改数据资产
     *
     * @param dto 数据资产
     * @return 结果
     */
    Boolean updateDataAsset(DataAssetDTO dto);

    /**
     * 批量删除数据资产
     *
     * @param ids 需要删除的数据资产主键集合
     * @return 结果
     */
    Boolean deleteByIds(List<Long> ids);

    /**
     * 删除数据资产信息
     *
     * @param id 数据资产主键
     * @return 结果
     */
    Boolean deleteById(Long id);

    /**
     * 更新资产状态
     *
     * @param id 资产ID
     * @param status 状态
     * @return 结果
     */
    Boolean updateStatus(Long id, String status);

    /**
     * 增加使用次数
     *
     * @param id 资产ID
     * @return 结果
     */
    Boolean incrementUseCount(Long id);

    /**
     * 搜索数据资产
     *
     * @param keyword 关键词
     * @param pageQuery 分页参数
     * @return 数据资产集合
     */
    TableDataInfo<DataAssetDTO> searchAssets(String keyword, PageQuery pageQuery);

    /**
     * 获取资产使用统计
     *
     * @param projectId 项目ID
     * @return 统计信息
     */
    DataAssetStatisticsVO getStatistics(Long projectId);

    /**
     * 按分类统计资产数量
     *
     * @param projectId 项目ID
     * @return 分类统计
     */
    Map<String, Integer> countByCategory(Long projectId);

    /**
     * 按类型统计资产数量
     *
     * @param projectId 项目ID
     * @return 类型统计
     */
    Map<String, Integer> countByType(Long projectId);

    /**
     * 按分级统计资产数量
     *
     * @param projectId 项目ID
     * @return 分级统计
     */
    Map<String, Integer> countByLevel(Long projectId);

}
